#ifndef OP
#define OP(opt, addrmode, cycles, no)
#endif
#ifndef UOP // unique op
#define UOP(opt, addrmode, cycles, no) OP(opt, addrmode, cycles, no)
#endif

// Opt, AddressingMode, Cycles, No
UOP(BRK, IMP, 7, 00)
UOP(ORA, INX, 6, 01)
UOP(KIL, IMP, 2, 02)
UOP(SLO, INX, 8, 03)
UOP(NOP, ZPG, 3, 04)
OP(ORA, ZPG, 3, 05)
UOP(ASL, ZPG, 5, 06)
OP(SLO, ZPG, 5, 07)
UOP(PHP, IMP, 3, 08)
OP(ORA, IMM, 2, 09)
OP(ASL, ACC, 2, 0A)
UOP(ANC, IMM, 2, 0B)
OP(NOP, ABS, 4, 0C)
OP(ORA, ABS, 4, 0D)
OP(ASL, ABS, 6, 0E)
OP(SLO, ABS, 6, 0F)
UOP(BPL, REL, 2, 10)
OP(ORA, INY, 5, 11)
OP(KIL, IMP, 2, 12)
OP(SLO, INY, 8, 13)
OP(NOP, ZPX, 4, 14)
OP(ORA, ZPX, 4, 15)
OP(ASL, ZPX, 6, 16)
OP(SLO, ZPX, 6, 17)
UOP(CLC, IMP, 2, 18)
OP(ORA, ABY, 4, 19)
OP(NOP, IMP, 2, 1A)
OP(SLO, ABY, 7, 1B)
OP(NOP, ABX, 4, 1C)
OP(ORA, ABX, 4, 1D)
OP(ASL, ABX, 7, 1E)
OP(SLO, ABX, 7, 1F)
UOP(JSR, ABS, 6, 20)
UOP(AND, INX, 6, 21)
OP(KIL, IMP, 2, 22)
UOP(RLA, INX, 8, 23)
UOP(BIT, ZPG, 3, 24)
OP(AND, ZPG, 3, 25)
UOP(ROL, ZPG, 5, 26)
OP(RLA, ZPG, 5, 27)
UOP(PLP, IMP, 4, 28)
OP(AND, IMM, 2, 29)
OP(ROL, ACC, 2, 2A)
OP(ANC, IMM, 2, 2B)
OP(BIT, ABS, 4, 2C)
OP(AND, ABS, 4, 2D)
OP(ROL, ABS, 6, 2E)
OP(RLA, ABS, 6, 2F)
UOP(BMI, REL, 2, 30)
OP(AND, INY, 5, 31)
OP(KIL, IMP, 2, 32)
OP(RLA, INY, 8, 33)
OP(NOP, ZPX, 4, 34)
OP(AND, ZPX, 4, 35)
OP(ROL, ZPX, 6, 36)
OP(RLA, ZPX, 6, 37)
UOP(SEC, IMP, 2, 38)
OP(AND, ABY, 4, 39)
OP(NOP, IMP, 2, 3A)
OP(RLA, ABY, 7, 3B)
OP(NOP, ABX, 4, 3C)
OP(AND, ABX, 4, 3D)
OP(ROL, ABX, 7, 3E)
OP(RLA, ABX, 7, 3F)
UOP(RTI, IMP, 6, 40)
UOP(EOR, INX, 6, 41)
OP(KIL, IMP, 2, 42)
UOP(SRE, INX, 8, 43)
OP(NOP, ZPG, 3, 44)
OP(EOR, ZPG, 3, 45)
UOP(LSR, ZPG, 5, 46)
OP(SRE, ZPG, 5, 47)
UOP(PHA, IMP, 3, 48)
OP(EOR, IMM, 2, 49)
OP(LSR, ACC, 2, 4A)
UOP(ASR, IMM, 2, 4B)
UOP(JMP, ABS, 3, 4C)
OP(EOR, ABS, 4, 4D)
OP(LSR, ABS, 6, 4E)
OP(SRE, ABS, 6, 4F)
UOP(BVC, REL, 2, 50)
OP(EOR, INY, 5, 51)
OP(KIL, IMP, 2, 52)
OP(SRE, INY, 8, 53)
OP(NOP, ZPX, 4, 54)
OP(EOR, ZPX, 4, 55)
OP(LSR, ZPX, 6, 56)
OP(SRE, ZPX, 6, 57)
UOP(CLI, IMP, 2, 58)
OP(EOR, ABY, 4, 59)
OP(NOP, IMP, 2, 5A)
OP(SRE, ABY, 7, 5B)
OP(NOP, ABX, 4, 5C)
OP(EOR, ABX, 4, 5D)
OP(LSR, ABX, 7, 5E)
OP(SRE, ABX, 7, 5F)
UOP(RTS, IMP, 6, 60)
UOP(ADC, INX, 6, 61)
OP(KIL, IMP, 2, 62)
UOP(RRA, INX, 8, 63)
OP(NOP, ZPG, 3, 64)
OP(ADC, ZPG, 3, 65)
UOP(ROR, ZPG, 5, 66)
OP(RRA, ZPG, 5, 67)
UOP(PLA, IMP, 4, 68)
OP(ADC, IMM, 2, 69)
OP(ROR, ACC, 2, 6A)
UOP(ARR, IMM, 2, 6B)
OP(JMP, IND, 5, 6C)
OP(ADC, ABS, 4, 6D)
OP(ROR, ABS, 6, 6E)
OP(RRA, ABS, 6, 6F)
UOP(BVS, REL, 2, 70)
OP(ADC, INY, 5, 71)
OP(KIL, IMP, 2, 72)
OP(RRA, INY, 8, 73)
OP(NOP, ZPX, 4, 74)
OP(ADC, ZPX, 4, 75)
OP(ROR, ZPX, 6, 76)
OP(RRA, ZPX, 6, 77)
UOP(SEI, IMP, 2, 78)
OP(ADC, ABY, 4, 79)
OP(NOP, IMP, 2, 7A)
OP(RRA, ABY, 7, 7B)
OP(NOP, ABX, 4, 7C)
OP(ADC, ABX, 4, 7D)
OP(ROR, ABX, 7, 7E)
OP(RRA, ABX, 7, 7F)
OP(NOP, IMM, 2, 80)
UOP(STA, INX, 6, 81)
OP(NOP, IMM, 2, 82)
UOP(SAX, INX, 6, 83)
UOP(STY, ZPG, 3, 84)
OP(STA, ZPG, 3, 85)
UOP(STX, ZPG, 3, 86)
OP(SAX, ZPG, 3, 87)
UOP(DEY, IMP, 2, 88)
OP(NOP, IMM, 2, 89)
UOP(TXA, IMP, 2, 8A)
UOP(XAA, IMM, 2, 8B)
OP(STY, ABS, 4, 8C)
OP(STA, ABS, 4, 8D)
OP(STX, ABS, 4, 8E)
OP(SAX, ABS, 4, 8F)
UOP(BCC, REL, 2, 90)
OP(STA, INY, 6, 91)
OP(KIL, IMP, 2, 92)
UOP(AHX, INY, 6, 93)
OP(STY, ZPX, 4, 94)
OP(STA, ZPX, 4, 95)
OP(STX, ZPY, 4, 96)
OP(SAX, ZPY, 4, 97)
UOP(TYA, IMP, 2, 98)
OP(STA, ABY, 5, 99)
UOP(TXS, IMP, 2, 9A)
UOP(TAS, ABY, 5, 9B)
UOP(SHY, ABX, 5, 9C)
OP(STA, ABX, 5, 9D)
UOP(SHX, ABY, 5, 9E)
OP(AHX, ABY, 5, 9F)
UOP(LDY, IMM, 2, A0)
UOP(LDA, INX, 6, A1)
UOP(LDX, IMM, 2, A2)
UOP(LAX, INX, 6, A3)
OP(LDY, ZPG, 3, A4)
OP(LDA, ZPG, 3, A5)
OP(LDX, ZPG, 3, A6)
OP(LAX, ZPG, 3, A7)
UOP(TAY, IMP, 2, A8)
OP(LDA, IMM, 2, A9)
UOP(TAX, IMP, 2, AA)
OP(LAX, IMM, 2, AB)
OP(LDY, ABS, 4, AC)
OP(LDA, ABS, 4, AD)
OP(LDX, ABS, 4, AE)
OP(LAX, ABS, 4, AF)
UOP(BCS, REL, 2, B0)
OP(LDA, INY, 5, B1)
OP(KIL, IMP, 2, B2)
OP(LAX, INY, 5, B3)
OP(LDY, ZPX, 4, B4)
OP(LDA, ZPX, 4, B5)
OP(LDX, ZPY, 4, B6)
OP(LAX, ZPY, 4, B7)
UOP(CLV, IMP, 2, B8)
OP(LDA, ABY, 4, B9)
UOP(TSX, IMP, 2, BA)
UOP(LAS, ABY, 4, BB)
OP(LDY, ABX, 4, BC)
OP(LDA, ABX, 4, BD)
OP(LDX, ABY, 4, BE)
OP(LAX, ABY, 4, BF)
UOP(CPY, IMM, 2, C0)
UOP(CMP, INX, 6, C1)
OP(NOP, IMM, 2, C2)
UOP(DCP, INX, 8, C3)
OP(CPY, ZPG, 3, C4)
OP(CMP, ZPG, 3, C5)
UOP(DEC, ZPG, 5, C6)
OP(DCP, ZPG, 5, C7)
UOP(INY, IMP, 2, C8)
OP(CMP, IMM, 2, C9)
UOP(DEX, IMP, 2, CA)
UOP(AXS, IMM, 2, CB)
OP(CPY, ABS, 4, CC)
OP(CMP, ABS, 4, CD)
OP(DEC, ABS, 6, CE)
OP(DCP, ABS, 6, CF)
UOP(BNE, REL, 2, D0)
OP(CMP, INY, 5, D1)
OP(KIL, IMP, 2, D2)
OP(DCP, INY, 8, D3)
OP(NOP, ZPX, 4, D4)
OP(CMP, ZPX, 4, D5)
OP(DEC, ZPX, 6, D6)
OP(DCP, ZPX, 6, D7)
UOP(CLD, IMP, 2, D8)
OP(CMP, ABY, 4, D9)
OP(NOP, IMP, 2, DA)
OP(DCP, ABY, 7, DB)
OP(NOP, ABX, 4, DC)
OP(CMP, ABX, 4, DD)
OP(DEC, ABX, 7, DE)
OP(DCP, ABX, 7, DF)
UOP(CPX, IMM, 2, E0)
UOP(SBC, INX, 6, E1)
OP(NOP, IMM, 2, E2)
UOP(ISB, INX, 8, E3)
OP(CPX, ZPG, 3, E4)
OP(SBC, ZPG, 3, E5)
UOP(INC, ZPG, 5, E6)
OP(ISB, ZPG, 5, E7)
UOP(INX, IMP, 2, E8)
OP(SBC, IMM, 2, E9)
OP(NOP, IMP, 2, EA)
OP(SBC, IMM, 2, EB)
OP(CPX, ABS, 4, EC)
OP(SBC, ABS, 4, ED)
OP(INC, ABS, 6, EE)
OP(ISB, ABS, 6, EF)
UOP(BEQ, REL, 2, F0)
OP(SBC, INY, 5, F1)
OP(KIL, IMP, 2, F2)
OP(ISB, INY, 8, F3)
OP(NOP, ZPX, 4, F4)
OP(SBC, ZPX, 4, F5)
OP(INC, ZPX, 6, F6)
OP(ISB, ZPX, 6, F7)
UOP(SED, IMP, 2, F8)
OP(SBC, ABY, 4, F9)
OP(NOP, IMP, 2, FA)
OP(ISB, ABY, 7, FB)
OP(NOP, ABX, 4, FC)
OP(SBC, ABX, 4, FD)
OP(INC, ABX, 7, FE)
OP(ISB, ABX, 7, FF)

#undef UOP
#undef OP
